package net.dgg.rz.evaluating.dao;

import net.dgg.rz.evaluating.entity.EvaluatingPaperSubject;
import net.dgg.rz.evaluating.entity.EvaluatingRatingLevel;
import org.springframework.stereotype.Component;
import org.apache.ibatis.annotations.Param;

import net.dgg.rz.evaluating.entity.EvaluatingBasicOptions;

import java.io.Serializable;
import java.util.*;

/**
 * Describe: 题目选项基础表Mapper接口
 * Created by zyou on 2019-05-22 .
 **/
@Component
public interface EvaluatingBasicOptionsDao {

    /**
     * <p>
     * 全量插入一条记录
     * </p>
     *
     * @param entity 实体对象
     * @return
     */
    Integer insertAllColumn(EvaluatingBasicOptions entity);

    /**
     * <p>
     * 批量插入多条记录
     * </p>
     *
     * @param entityList 实体对象
     * @return
     */
    Integer insertBatch(List<EvaluatingBasicOptions> entityList);

    /**
     * <p>
     * 根据 主键ID 删除
     * </p>
     *
     * @param id 主键ID
     * @return
     */
    Integer deleteById(Serializable id);

    /**
     * <p>
     * 根据 columnMap 条件，删除记录
     * </p>
     *
     * @param columnMap 表字段 map 对象
     * @return
     */
    Integer deleteByMap(Map<String, Object> columnMap);

    /**
     * <p>
     * 删除（根据主键ID 批量删除）
     * </p>
     *
     * @param ids 主键ID列表
     * @return
     */
    Integer deleteBatchIds(@Param("ids") Collection<? extends Serializable> ids);

    /**
     * <p>
     * 根据 主键ID 修改
     * </p>
     *
     * @param entity 实体对象
     * @return
     */
    Integer updateById(EvaluatingBasicOptions entity);

    /**
     * <p>
     * 根据 主键ID 全量修改
     * </p>
     *
     * @param entity 实体对象
     * @return
     */
    Integer updateAllColumnById(EvaluatingBasicOptions entity);

    /**
     * <p>
     * 根据ID 批量更新
     * </p>
     *
     * @param entityList 实体对象列表
     * @return boolean
     */
    Integer updateBatchById(List<EvaluatingBasicOptions> entityList);

    /**
     * <p>
     * 批量更新
     * </p>
     *
     * @param entityList 实体对象列表
     * @return boolean
     */
    Integer updateBatch(List<EvaluatingBasicOptions> entityList);

    /**
     * <p>
     * 根据 columnMap 条件，更新记录
     * </p>
     *
     * @param entity    实体对象
     * @param columnMap 实体对象封装操作类（可以为 null）
     * @return
     */
     Integer update(@Param("et") EvaluatingBasicOptions entity,@Param("map") Map<String, Object> columnMap);

    /**
     * <p>
     * 根据 主键 ID 查询
     * </p>
     *
     * @param id 主键ID
     * @return
     */
    EvaluatingBasicOptions selectById(Serializable id);

    /**
     * <p>
     * 查询（根据ID 批量查询）
     * </p>
     *
     * @param ids 主键ID列表
     * @return
     */
    List<EvaluatingBasicOptions> selectBatchIds(@Param("ids") Collection<? extends Serializable> ids);

    /**
     * <p>
     * 查询（根据 columnMap 条件）
     * </p>
     *
     * @param columnMap 表字段 map 对象
     * @return
     */
    List<EvaluatingBasicOptions> selectByMap(Map<String, Object> columnMap);

    /**
     * <p>
     * 根据 entity 条件，查询一条记录
     * </p>
     *
     * @param entity 实体对象
     * @return
     */
    EvaluatingBasicOptions selectOne(EvaluatingBasicOptions entity);

    /**
     * 题目列表
     * @param params
     * @return
     */
    List<Map<String, Object>> subjectListWithPage(Map params);

    /**
     * 选项列表
     * @param params
     * @return
     */
    List<EvaluatingBasicOptions> optionsListWithPage(Map params);



    /**
     * 根据题目id查询选项
     * @param params
     * @return
     */
    List<EvaluatingBasicOptions> queryOptionsBySubjectId(Map params);

    /**
     * 选项名称/code判重
     * @param optionsNameMap
     * @return
     */
    int countOptionsByParams(Map optionsNameMap);



    /**
     * <p>
     * 编辑客户级别绑定
     * </p>
     *
     * @param entity 实体对象
     * @return
     */
    Integer updateOptions(EvaluatingBasicOptions entity);
}
